-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA512

=============================================================================
FreeBSD-SA-20:23.sendmsg                                    Security Advisory
                                                          The FreeBSD Project

Topic:          sendmsg(2) privilege escalation

Category:       core
Module:         kernel compat32
Announced:      2020-08-05
Credits:        m00nbsd working with Trend Micro Zero Day Initiative
Affects:        All supported versions of FreeBSD.
Corrected:      2020-08-05 17:07:13 UTC (stable/12, 12.1-STABLE)
                2020-08-05 17:14:01 UTC (releng/12.1, 12.1-RELEASE-p8)
                2020-08-05 17:08:02 UTC (stable/11, 11.4-STABLE)
                2020-08-05 17:14:01 UTC (releng/11.4, 11.4-RELEASE-p2)
                2020-08-05 17:14:01 UTC (releng/11.3, 11.3-RELEASE-p12)
CVE Name:       CVE-2020-7460

For general information regarding FreeBSD Security Advisories,
including descriptions of the fields above, security branches, and the
following sections, please visit <URL:https://security.FreeBSD.org/>.

I.   Background

FreeBSD provides the compat32 subsystem, used to enable execution of 32-bit
binaries on amd64 and other 64-bit platforms.  System calls whose parameters
require translation are handled by compat32 before being dispatched to the
native system call handler.

sendmsg(2) and recvmsg(2) may be used to transmit or receive control messages
whose contents are evaluated by the kernel.  Such messages have different
alignment constraints on 32-bit and 64-bit platforms and thus must be translated
by the compat32 subsystem when sendmsg(2) or recvmsg(2) are invoked by a 32-bit
process.

II.  Problem Description

When handling a 32-bit sendmsg(2) call, the compat32 subsystem copies the
control message to be transmitted (if any) into kernel memory, and adjusts
alignment of control message headers.  The code which performs this work
contained a time-of-check to time-of-use (TOCTOU) vulnerability which allows a
malicious userspace program to modify control message headers after they were
validated by the kernel.

III. Impact

The TOCTOU bug can be exploited by an unprivileged malicious userspace program
to trigger privilege escalation.

IV.  Workaround

i386 and other 32-bit platforms are not vulnerable.

No workaround is available for amd64 or arm64.  Kernels compiled without the
COMPAT_FREEBSD32 option are not vulnerable, but this option is configured in
GENERIC kernels.

V.   Solution

Upgrade your vulnerable system to a supported FreeBSD stable or
release / security branch (releng) dated after the correction date,
and reboot.

Perform one of the following:

1) To update your vulnerable system via a binary patch:

Systems running a RELEASE version of FreeBSD on the i386 or amd64
platforms can be updated via the freebsd-update(8) utility:

# freebsd-update fetch
# freebsd-update install
# shutdown -r +10min "Rebooting for a security update"

2) To update your vulnerable system via a source code patch:

The following patches have been verified to apply to the applicable
FreeBSD release branches.

a) Download the relevant patch from the location below, and verify the
detached PGP signature using your PGP utility.

# fetch https://security.FreeBSD.org/patches/SA-20:23/sendmsg.patch
# fetch https://security.FreeBSD.org/patches/SA-20:23/sendmsg.patch.asc
# gpg --verify sendmsg.patch.asc

b) Apply the patch.  Execute the following commands as root:

# cd /usr/src
# patch < /path/to/patch

c) Recompile your kernel as described in
<URL:https://www.FreeBSD.org/handbook/kernelconfig.html> and reboot the
system.

VI.  Correction details

The following list contains the correction revision numbers for each
affected branch.

Branch/path                                                      Revision
- -------------------------------------------------------------------------
stable/12/                                                        r363918
releng/12.1/                                                      r363923
stable/11/                                                        r363919
releng/11.4/                                                      r363923
releng/11.3/                                                      r363923
- -------------------------------------------------------------------------

To see which files were modified by a particular revision, run the
following command, replacing NNNNNN with the revision number, on a
machine with Subversion installed:

# svn diff -cNNNNNN --summarize svn://svn.freebsd.org/base

Or visit the following URL, replacing NNNNNN with the revision number:

<URL:https://svnweb.freebsd.org/base?view=revision&revision=NNNNNN>

VII. References

<URL:https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2020-7460>

The latest revision of this advisory is available at
<URL:https://security.FreeBSD.org/advisories/FreeBSD-SA-20:23.sendmsg.asc>
-----BEGIN PGP SIGNATURE-----

iQKTBAEBCgB9FiEE/A6HiuWv54gCjWNV05eS9J6n5cIFAl8q63hfFIAAAAAALgAo
aXNzdWVyLWZwckBub3RhdGlvbnMub3BlbnBncC5maWZ0aGhvcnNlbWFuLm5ldEZD
MEU4NzhBRTVBRkU3ODgwMjhENjM1NUQzOTc5MkY0OUVBN0U1QzIACgkQ05eS9J6n
5cJDxw/+PML4MB46paBDyLvebprXe5Z/FrUN1ybH8YjrJTYFyX+aw8K3hAa2K+PB
kUc3VwbIv0BAylSCgULXdTxx8JKpMnmHcN3Bk8LKdMCvp0gJvkzcAP/a7Kj1EKfY
m04p3/7ka9f7u99n1QX1jnZP2XWEFKOoyWbEJWuDk0+NBW3ICQWqQLoiXaWAS4HD
BrXAqowtyoR1vaMrAjmSyWaFSDFjQeiHw8nxCzRF1E6cKF/rwCt37cnpEGqSCAYi
/ZyB1qy1s67F9hHnZp9+JhffWqUZAuLse8HTWgBG+svpzDrx2gNxE/C/Tui0lYXg
S3akC3DbiySZpP007J8yR5PvytYAbSuECJVVRoC0dukmBabFqSFlacInpfIn363m
fOg1nmq/oRh9MAJzaBKG+N6SD+mP3kvcV9Ad5fOKr4yLQtlwYEYyiN1WbCs0O/ve
fnRIGB9xtibIr1i9IEY7+KNMAH3Di2F0E4ixFPMrBcJiStuZmCTqJRx99QLYtb0G
p9p1bzjPUaWAMDi9mteFu1I+NO836MeLydbCZnSa5KLe+vc1PjP4kSvt6XQ9HFtO
nXMddWxdcus8BmxZ04K5a4WaaSYOiN4e4O72WWuA714io+EWJAEaqleMr7KbYTCv
f1fCmoKxyoFJcHL9z3oOOi5DqrBoFPnE0p/gPGFc8qyTNEbI428=
=tTSr
-----END PGP SIGNATURE-----
